home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 52
/
Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso
/
Aminet
/
misc
/
emu
/
Apex-src.lha
/
DUMP.XPL
< prev
next >
Wrap
Text File
|
2001-09-30
|
2KB
|
116 lines
\DUMP.XPL APR-10-87
\Program to dump the disk
\REVISION HISTORY:
\FEB-26-86, Modified for 68000, L.B.
\APR-10-87, Changed string termination.
code REM=2, RESERVE=3, CHIN=7, CHOUT=8,
CRLF=9, INTIN=10, INTOUT=11, TEXT=12,
OPENI=13, OPENO=14, CLOSE=15, TRAP=17,
ERRFLG=22, READ=31;
int ODEV, \Output device number
UNIT, \Unit number
BLKNUM, \Block number
FBLK, \First block
LBLK; \Last block
addr BLOCK; \Hold working block of disk data
\----------------------------------------------------------------------
proc BYTEOUT(N); \Output N as 2 hex digits
int N;
int R;
addr HEXTBL;
begin
HEXTBL:="0123456789ABCDEF";
N:= (N&$FF)/16;
R:= REM(0);
CHOUT(ODEV, HEXTBL(N));
CHOUT(ODEV, HEXTBL(R));
end; \BYTEOUT
\----------------------------------------------------------------------
proc READBLK; \Read a block from UNIT
begin
\if ERRFLG then; \\Flush errors
\TRAP(false);
READ(UNIT,BLKNUM,BLOCK,1);
\TRAP(true);
\if ERRFLG then
\ begin
\ TEXT(0,"READ ERROR ON BLOCK NUMBER ");
\ INTOUT(0,BLKNUM);
\ CRLF(0);
\ end;
end; \READBLK
\----------------------------------------------------------------------
proc SHOWCH(CH); \Show character
int CH;
begin
CH:= CH&$7F;
CHOUT(ODEV, if CH<$20 ! CH>=$7F then ^. else CH);
end; \SHOWCH
proc SHOWBLK; \Show the block
int X,Y;
begin
CRLF(ODEV);
TEXT(ODEV,"BLOCK NUMBER "); INTOUT(ODEV,BLKNUM); CRLF(ODEV);
CRLF(ODEV);
for X:=0, 15 do
begin
BYTEOUT(X *16);
TEXT(ODEV,": ");
for Y:=0, 15 do
begin
BYTEOUT(BLOCK(X *16 + Y));
Y:= Y+1;
BYTEOUT(BLOCK(X *16 + Y));
CHOUT(ODEV,^ );
end;
TEXT(ODEV," ");
for Y:=0, 15 do SHOWCH(BLOCK(16*X +Y));
CRLF(ODEV);
end;
end; \SHOWBLK
\----------------------------------------------------------------------
begin \MAIN
BLOCK:= RESERVE(256);
TEXT(0,"-- DISK DUMP, V1.8x2 --
OUTPUT DEVICE? ");
ODEV:= INTIN(0);
TEXT(0,"UNIT? ");
UNIT:= INTIN(0);
OPENO(ODEV);
loop begin
TEXT(0,"FIRST BLOCK? ");
FBLK:= INTIN(0);
TEXT(0,"LAST BLOCK? ");
LBLK:= INTIN(0);
for BLKNUM:=FBLK,LBLK do
begin
READBLK;
SHOWBLK;
CRLF(ODEV);
end;
TEXT(0,"MORE (N/Y)? ");
OPENI(0);
if (CHIN(0)!$20)#^y then quit;
end;
CLOSE(ODEV);
end; \MAIN
CRLF(ODEV);
end;
TEXT(0,"MORE (N/Y)?